import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store'

Vue.use(VueRouter)

// 将编程式导航调用 push() 时可能报错的异常静默处理
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function (location, onSuccess, onFail) {
  if (onSuccess || onFail) {
    return originalPush.call(this, location, onSuccess, onFail)
  }
  return originalPush.call(this, location).catch(() => {})
}

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

// 定义数组保存需要登录权限才能访问的路由路径
const permissionRoutes = ['/mine', '/confirm']
// 全局前置守卫： 用于拦截用户权限处理
router.beforeEach((to, from, next) => {
  // 如果即将进入的目标路由是需要登录权限才能访问的，则判断用户登录权限
  if (permissionRoutes.includes(to.path)) {
    // 判断 vuex 的 state 中是否有保存用户的 token 数据
    // 有则说明用户已登录，无则跳转到登录页面
    if (store.state.user.token) {
      next()
    } else {
      next({
        name: 'login',
        params: {
          real: to
        }
      })
    }
  } else {
    next()
  }
})

export default router
